package io.github.froger.instamaterial.ui.view; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewTreeObserver; import android.widget.FrameLayout; import butterknife.BindView; import butterknife.ButterKnife; import io.github.froger.instamaterial.R; /** * Created by Miroslaw Stanek on 09.12.2015. */ public class LoadingFeedItemView extends FrameLayout { @BindView(R.id.vSendingProgress) SendingProgressView vSendingProgress; @BindView(R.id.vProgressBg) View vProgressBg; private OnLoadingFinishedListener onLoadingFinishedListener; public LoadingFeedItemView(Context context) { super(context); init(); } public LoadingFeedItemView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public LoadingFeedItemView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public LoadingFeedItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(); } private void init() { LayoutInflater.from(getContext()).inflate(R.layout.item_feed_loader, this, true); ButterKnife.bind(this); } public void startLoading() { vSendingProgress.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { vSendingProgress.getViewTreeObserver().removeOnPreDrawListener(this); vSendingProgress.simulateProgress(); return true; } }); vSendingProgress.setOnLoadingFinishedListener(new SendingProgressView.OnLoadingFinishedListener() { @Override public void onLoadingFinished() { vSendingProgress.animate().scaleY(0).scaleX(0).setDuration(200).setStartDelay(100); vProgressBg.animate().alpha(0.f).setDuration(200).setStartDelay(100) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { vSendingProgress.setScaleX(1); vSendingProgress.setScaleY(1); vProgressBg.setAlpha(1); if (onLoadingFinishedListener != null) { onLoadingFinishedListener.onLoadingFinished(); onLoadingFinishedListener = null; } } }).start(); } }); } public void setOnLoadingFinishedListener(OnLoadingFinishedListener onLoadingFinishedListener) { this.onLoadingFinishedListener = onLoadingFinishedListener; } public interface OnLoadingFinishedListener { void onLoadingFinished(); } }